Amazon Redshiftのクロスリージョンデータ共有機能を試してみた
いわさです。
昨年11月にプレビューリリースされていた、Redshiftのクロスリージョンデータ共有機能がGAとなりました。
以前から同一リージョン内のクラスター間のデータ共有は可能だったようですが、今回クロスリージョンに対応した形です。
Redshiftを触る良いきっかけかなと思ったので、試してみることにしました。
なお、手順の大部分は以下のデータ共有の記事を参考にさせて頂きました。
注意点
本機能を使うにあたり、プロデューサークラスターおよびコンシューマークラスターは、RA3ノードタイプを利用する必要があります。(ra3.16xlarge、ra3.4xlarge、ra3.xlplus)
よって、本日時点では大阪リージョンではまだ利用が出来ません。
また、Redshiftクラスター間のリージョン間転送は別途追加のデータ転送料金が発生します。
詳細は以下をご確認ください。
Managing cost control for cross-Region data sharing - Amazon Redshift
設定する
今回は東京リージョンのクラスターをプロデューサーとし、バージニア北部のクラスターをコンシューマーとしました。
プロデューサー側(データを所有している、共有する側)
マネジメントコンソールとクエリ&CLIのどちらからでも作成出来るようなのですが、マネジメントコンソールから作成してみました。
データ共有タブからCreate datashare
を選択します。
Datashare informationでデータ共有名・データベース名とパブリックアクセス可能クラスターへの共有を許可するかどうかと指定します。
共有するスキーマやテーブルをここで指定します。
一点注意点があって、起動時ロードしたサンプルDBを使う場合、共有対象に指定出来ません。ここがよくわからなくてだいぶ時間を使ってしまいました。
クエリエディターから共有オブジェクトを追加しようとすると以下のようなエラーが発生します。
ALTER DATASHARE hoge_share ADD TABLE dev.public.users; ERROR: Bootstrap owned table users cannot be added to a datashare. [ErrorId: 1-62140adc-61291ceb1d1dbc503c6d20c8]
よって、ここでは適当なテーブルを新規作成し、共有対象として追加することにしました。
--create table category_stage --(catid smallint default 0, --catgroup varchar(10) default 'General', --catname varchar(10) default 'General', --catdesc varchar(50) default 'General'); insert into category_stage values (1, 'aaa', '111', 'hoge'); insert into category_stage values (2, 'bbb', '222', 'hoge'); insert into category_stage values (3, 'ccc', '333', 'hoge'); ALTER DATASHARE hoge_share ADD TABLE dev.public.category_stage;
対象コンシューマーの追加ですが、Add namespaces to the datashare
では別リージョンのクラスターは参照出来ないようです。
Add AWS accounts to the datashare
から、自分のアカウントを追加しました。
コンシューマー側(データの利用側)
プロデューサー側でデータ共有を作成出来たので、コンシューマー側でクラスターへの関連付けを行います。
対象リージョンとクラスターを指定します。
ここからはバージニア北部のクエリエディターでデータ共有からデータベースを作成します。
CREATE DATABASE hoge FROM DATASHARE hoge_share OF NAMESPACE '1d4dbad5-2ac7-41c2-a67f-d4066b5d8bd6';
作成されましたね。
使ってみる
データを参照してみると、利用出来ていますね。
なお、データ共有から参照するオブジェクトは読み取り専用です。
プロデューサー側でレコードを追加し、コンシューマー側からすぐに参照出来るかも確認してみます。
こちらも期待どおり動作していました。
さいごに
本日はRedshiftのデータ共有機能を使ってクロスリージョンデータ共有を行ってみました。
Redshiftもデータ共有も初めてだったのでだいぶ手間取りました。
なお、共有データのアクセス時はコンシューマーのコンピューティングリソースを使用するようでプロデューサークラスターのパフォーマンスには影響しないそうです。
従来はクロスリージョンの場合は別途データコピーやレプリケーションを実装していたそうなのです。クエリの頻度によってはクロスリージョンデータ転送とのトレードオフになりそうな気はしますが、データ連携のオプションのひとつとして覚えておきたいと思います。